<template>
  <div :style="{ 'height': containerHeight}">
    <div ref="canvasContainer" class="time-s-class" style="height: calc(100% - 50px);" :style="{'margin':timeMargin +'px'}">
      <canvas
        id="canvas"
        class="de-canvas"
        :width="canvas_width"
        :height="canvas_height"
      />
      <!-- <canvas  id="canvas" class="de-canvas" :width="$refs.canvasContainer.clientWidth" :height="$refs.canvasContainer.clientHeight" /> -->
    </div>
    <div style="height: 50px;display: flex;align-items: center;">
      <p id="fulltime" :style="{'fontSize': (parseInt(element.style.fontSize) * 1) + 'px', 'color':element.style.color}" style="width:100%;margin:auto;" />
    </div>
  </div>
</template>

<script>
export default {
  name: 'TimeSimple',
  props: {
    element: {
      type: Object,
      default: null
    }
  },
  data() {
    return {
      time: '',
      date: '',
      week: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
      canvas: null,
      draw: null,
      timer: null,
      canvas_width: null,
      canvas_height: null,
      padding: 0

    }
  },
  computed: {
    timeMargin() {
      return this.element.style.time_margin
    },
    containerHeight() {
      return 'calc(100% - ' + this.element.style.time_margin * 2 + 'px)'
    }
  },
  mounted() {
    this.canvas = document.getElementById('canvas')
    this.draw = this.canvas.getContext('2d')
    this.canvas_width = this.element.style.width
    this.canvas_height = this.element.style.height
    this.currentTime()
  },
  beforeDestroy() {
    if (this.timer) {
      clearInterval(this.timer) // 在Vue实例销毁前，清除时间定时器
    }
  },
  methods: {
    resize() {
      this.$forceUpdate()
    },
    currentTime() {
      this.timer = setInterval(this.canvass, 500)
    },
    canvass() {
      const timeFormat = this.element.formatInfo.timeFormat || 'hh:mm:ss'
      const dateFormat = this.element.formatInfo.dateFormat || 'yyyy-MM-dd'
      const showWeek = this.element.formatInfo.showWeek
      const showDate = this.element.formatInfo.showDate

      const canvas_w = this.$refs.canvasContainer.clientWidth || this.element.style.width
      if (canvas_w !== this.canvas_width) {
        this.canvas_width = canvas_w
      }

      const canvas_h = this.$refs.canvasContainer.clientHeight || (this.element.style.height - 50)

      if (canvas_h !== this.canvas_height) {
        this.canvas_height = canvas_h
      }

      const side_length = Math.min(canvas_w, canvas_h)

      const draws = this.draw
      // 获取时间
      var time = new Date()

      var w = time.getDay()
      var englishWeek = ''
      var h = time.getHours()

      var min = time.getMinutes()

      var s = time.getSeconds()

      if (w === 0) {
        englishWeek = 'Sunday'
      } else if (w === 1) {
        englishWeek = 'Monday'
      } else if (w === 2) {
        englishWeek = 'Tuesday'
      } else if (w === 3) {
        englishWeek = 'Wednesday'
      } else if (w === 4) {
        englishWeek = 'Thursday'
      } else if (w === 5) {
        englishWeek = 'Friday'
      } else {
        englishWeek = 'Saturday'
      }

      const simpleTime = time.format(timeFormat)
      let nowDate = ''
      if (showDate && dateFormat) {
        nowDate = time.format(dateFormat)
      }
      const nowWeek = this.week[time.getDay()]
      var fullTime = showWeek ? (nowDate + ' ' + nowWeek) : nowDate
      var fullDoc = document.getElementById('fulltime')
      fullDoc.innerHTML = fullTime

      const draw = draws
      draw.clearRect(0, 0, canvas_w, canvas_h)

      draw.fillStyle = this.element.style.color
      draw.font = this.element.style.fontSize + 'px 黑体'
      draw.fillText(simpleTime, canvas_w / 2 - 33, canvas_h / 2 + 50)
      showWeek && draw.fillText(englishWeek, canvas_w / 2 - 25, canvas_h / 2 + 70)
      for (var i = 0; i < 12; i++) {
        draw.save()

        draw.lineWidth = 4
        draw.strokeStyle = this.element.style.color
        draw.translate(canvas_w / 2, canvas_h / 2)
        draw.rotate(i * 30 * Math.PI / 180)

        draw.beginPath()

        draw.moveTo(0, side_length / 2 - 0)
        /* draw.moveTo(0, side_length / 2 - 70)
        draw.lineTo(0, side_length / 2 - 50) */
        draw.lineTo(0, side_length / 2 - 20)
        draw.closePath()
        draw.stroke()
        draw.restore()
      }
      // 分刻度
      for (let i = 0; i < 60; i++) {
        draw.save()
        draw.translate(canvas_w / 2, canvas_h / 2)
        draw.rotate(i * 6 * Math.PI / 180)
        draw.lineWidth = 2
        draw.strokeStyle = this.element.style.color
        draw.beginPath()

        draw.moveTo(0, side_length / 2 - 0)
        // draw.lineTo(0, side_length / 2 - 50)
        // draw.lineTo(0, side_length / 2 - 60)
        draw.lineTo(0, side_length / 2 - 10)
        draw.closePath()
        draw.stroke()

        draw.restore()
      }

      // 画时阵
      draw.save()
      draw.strokeStyle = this.element.style.color
      // draw.translate(250, 250)
      draw.translate(canvas_w / 2, canvas_h / 2)
      const hourzs = h + min / 60// 获取浮点类型的小时
      draw.rotate(hourzs * 30 * Math.PI / 180)
      draw.lineWidth = 6
      draw.beginPath()
      draw.moveTo(0, 0)
      /* draw.lineTo(0, -(side_length / 2 - 60) / 3) */
      draw.lineTo(0, -(side_length / 2) * 0.5)
      draw.closePath()
      draw.stroke()
      draw.restore()
      // 画分针
      draw.save()
      // draw.translate(250, 250)
      draw.translate(canvas_w / 2, canvas_h / 2)

      draw.rotate(min * 6 * Math.PI / 180)
      draw.strokeStyle = this.element.style.color
      draw.lineWidth = 3
      draw.beginPath()
      draw.moveTo(0, 0)
      draw.lineTo(0, -(side_length / 2) * 0.7)
      /* draw.lineTo(0, -(side_length / 2 - 60) * 3 / 5) */
      draw.closePath()
      draw.stroke()
      draw.restore()
      // 画秒针
      draw.save()
      // draw.translate(250, 250)
      draw.translate(canvas_w / 2, canvas_h / 2)
      draw.rotate(s * 6 * Math.PI / 180)
      draw.strokeStyle = this.element.style.color
      draw.lineWidth = 1
      draw.beginPath()
      draw.moveTo(0, 15)
      draw.lineTo(0, -(side_length / 2) * 0.9)
      /* draw.lineTo(0, -(side_length / 2 - 60)) */
      draw.closePath()
      draw.stroke()
      draw.restore()

      // 画中心原点
      // draw.fillStyle = 'rgba(255,255,255,1)'
      draw.lineWidth = 2
      draw.beginPath()
      // draw.arc(250, 250, 4, 0, 360, false)
      draw.arc(canvas_w / 2, canvas_h / 2, 4, 0, 360, false)
      draw.closePath()
      draw.fill()
    }
  }
}
</script>

<style lang="scss" scoped>

</style>
